//
//  main.m
//  base_m_06_内存管理
//
//  Created by China Dragon on 2023/1/26.
//

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Book.h"
/*
 内存管理
 https://www.bilibili.com/video/BV1EE41157Uz?p=42&spm_id_from=pageDriver&vd_source=4110e082785c06a8c24a5c86c6182472
 
 https://www.bilibili.com/video/BV1EE41157Uz?p=43&spm_id_from=pageDriver&vd_source=4110e082785c06a8c24a5c86c6182472
 */

void test(Student *stu){
    stu.book = [[Book alloc]initWithPrice:5.3];//从内存管理角度来看，这样写会造成内存泄露，book没有被回收，新版的xcode这样写没问题，会自动回收book
    
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *stu = [[Student alloc]init];//计数器为1
        stu.age = 16;
        NSLog(@"stu age is %i", stu.age);
        NSLog(@"结束");
        
        //NSLog(@"count is %zi",[stu retainCount]);
        // 看retainCount 源码 是 NSUInteger类型，再看 NSUInteger源码，是 typedef unsigned long ，无符号，大于等于 0 ，所以使用 %zi
        //z代表无符号
        
//        [stu retain];//
        //[stu release];// ios5.0 、xcode4.2之后多了一个属性ARC（auto  reference count）   自动引用计数器，自动生成 release、dealloc 代码
        
        
//        Book *book = [[Book alloc]init];
//        Book *book = [[Book alloc]initWithPrice:3.5];
//        stu.book = book;
        test(stu);
        
//        NSLog(@"书的价格为 %f",book.price);
   
    }
    return 0;
}
